/**
 * 
 */
package iut2.sponsor.server;

import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import iut2.sponsor.client.Sponsor;
import iut2.sponsor.client.Sponsors;


/**
 * Classe gerant la lecture et l'ecriture dans le fichier xml contenant les sponsors de l'application
 */
public class SponsorIO {
	/**
	 * liste des sponsors
	 */
	private Sponsors sponsors;
	/**
	 * fichier xml contenant les sponsors
	 */
	private final String FILE = "sponsors.xml";
	
	/**
	 * constructeur
	 */
	public SponsorIO(){
		try {
			read();
		} catch (FileNotFoundException e) {
			sponsors = new Sponsors();
			e.printStackTrace();
		}
	}
	
	/**
	 * @return la liste des sponsors contenus dans le fichier
	 */
	public Sponsors getSponsors() {
		try {
			read();
		} catch (FileNotFoundException e) {
			sponsors = new Sponsors();
			e.printStackTrace();
		}
		return sponsors;
	}
	
	/**
	 * enregistre une liste de sponsors dans le fichier
	 */
	public void setSponsors(Sponsors sponsors) {
		this.sponsors = sponsors;
		try {
			write();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * ecrit une liste de sponsors dans le fichier xml
	 * @throws FileNotFoundException 
	 */
	public void write() throws FileNotFoundException {
		 // ouverture de l'encodeur vers le fichier
        XMLEncoder encoder = new XMLEncoder(new FileOutputStream(FILE));
        try {
        	encoder.writeObject(sponsors);
            encoder.flush();
        } finally {
            // fermeture de l'encodeur
            encoder.close();
        }
	}
	
	/**
	 * lit les sponsors dans le fichier xml
	 * @throws FileNotFoundException 
	 */
	public void read() throws FileNotFoundException {
		 // ouverture de l'encodeur vers le fichier
        XMLDecoder decoder = new XMLDecoder(new FileInputStream(FILE));
        try {
        	sponsors = (Sponsors) decoder.readObject();
        } finally {
            // fermeture de l'encodeur
        	decoder.close();
        }
	}
	
	/**
	 * ajoute un sponsor au fichier xml
	 * @param sp
	 */
	public void addSponsor(Sponsor sp) {
		sponsors.add(sp);
	}
}
